//package com.jh.fcsm.config;
//
//import com.alibaba.druid.pool.DruidDataSource;
//import com.jh.fcsm.enums.DataSourceType;
//import org.springframework.context.annotation.Primary;
//import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import javax.sql.DataSource;
//import java.sql.SQLException;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * 加载所有数据源
// */
//@Component
//@Primary
//public class DataSourceManagement extends AbstractRoutingDataSource {
//    public static ThreadLocal<String> flag = new ThreadLocal<>();
//
//    public DataSourceManagement() {
//        flag.set(DataSourceType.DEFAULT.name());
//    }
//
//    @Override
//    protected Object determineCurrentLookupKey() {
//        return flag.get();
//    }
//
//    @Override
//    public void afterPropertiesSet() {
//        Map<Object, Object> targetDataSource = new ConcurrentHashMap<>();
//        targetDataSource.put(DataSourceType.MYSQL_DATASOURCE1.name(), mysqlDataSource1);
//        targetDataSource.put(DataSourceType.MYSQL_DATASOURCE2.name(), mysqlDataSource2);
//        // 设置数据源来源
//        super.setTargetDataSources(targetDataSource);
//        // 设置默认数据源
//        super.setDefaultTargetDataSource(mysqlDataSource1);
//        super.afterPropertiesSet();
//    }
//
//
//    public DataSource dataSource(String url) throws SQLException {
//        DruidDataSource datasource = new DruidDataSource();
//        datasource.setUrl(url);
//        datasource.setUsername(username);
//        datasource.setPassword(password);
//        datasource.setDriverClassName(driverClassName);
//        // configuration
//        datasource.setInitialSize(initialSize);
//        datasource.setMinIdle(minIdle);
//        datasource.setMaxActive(maxActive);
//        datasource.setMaxWait(60000);
//        datasource.setTimeBetweenEvictionRunsMillis(60000);
//        datasource.setMinEvictableIdleTimeMillis(30000);
//        datasource.setMaxPoolPreparedStatementPerConnectionSize(20);
//        return datasource;
//    }
//}